import { ipc, isEE } from '@/utils/ipcRenderer'

// 默认设置
const defaultSettings = {
  displayMode: 'option1',
  notifications: false,
  language: 'zh-CN',
  fontSize: 14,
  loginVerification: true
}

// 浏览器环境下的LocalStorage存储
const browserStorage = {
  getSettings(userId = 'default') {
    try {
      const key = `user_settings_${userId}`
      const data = localStorage.getItem(key)
      return data ? JSON.parse(data) : defaultSettings
    } catch (error) {
      console.warn('读取本地存储失败，使用默认设置:', error)
      return defaultSettings
    }
  },

  saveSettings(settings, userId = 'default') {
    try {
      const key = `user_settings_${userId}`
      const data = {
        ...defaultSettings,
        ...settings,
        updatedAt: new Date().toISOString()
      }
      localStorage.setItem(key, JSON.stringify(data))
      return { success: true, settings: data }
    } catch (error) {
      console.error('保存到本地存储失败:', error)
      throw error
    }
  },

  resetSettings(userId = 'default') {
    try {
      const key = `user_settings_${userId}`
      localStorage.removeItem(key)
      return defaultSettings
    } catch (error) {
      console.error('重置本地存储失败:', error)
      throw error
    }
  }
}

/**
 * 系统设置相关API
 */
export default {
  /**
   * 获取用户设置
   * @param {string} userId 用户ID，默认为'default'
   * @returns {Promise} 设置数据
   */
  async getSettings(userId = 'default') {
    try {
      // Electron环境使用IPC通信
      if (isEE && ipc) {
        const result = await ipc.invoke('controller.settings.getSettings', { userId })
        if (result.code === 200) {
          return result.data
        }
        throw new Error(result.message || '获取设置失败')
      } 
      // 浏览器环境使用LocalStorage
      else {
        return browserStorage.getSettings(userId)
      }
    } catch (error) {
      console.error('获取设置失败:', error)
      // 兜底返回默认设置
      return defaultSettings
    }
  },

  /**
   * 保存用户设置
   * @param {Object} settings 设置对象
   * @param {string} userId 用户ID，默认为'default'
   * @returns {Promise} 保存结果
   */
  async saveSettings(settings, userId = 'default') {
    try {
      // Electron环境使用IPC通信
      if (isEE && ipc) {
        const result = await ipc.invoke('controller.settings.saveSettings', { 
          userId, 
          settings 
        })
        if (result.code === 200) {
          return result.data
        }
        throw new Error(result.message || '保存设置失败')
      } 
      // 浏览器环境使用LocalStorage
      else {
        return browserStorage.saveSettings(settings, userId)
      }
    } catch (error) {
      console.error('保存设置失败:', error)
      throw error
    }
  },

  /**
   * 重置用户设置
   * @param {string} userId 用户ID，默认为'default'
   * @returns {Promise} 重置后的默认设置
   */
  async resetSettings(userId = 'default') {
    try {
      // Electron环境使用IPC通信
      if (isEE && ipc) {
        const result = await ipc.invoke('controller.settings.resetSettings', { userId })
        if (result.code === 200) {
          return result.data
        }
        throw new Error(result.message || '重置设置失败')
      } 
      // 浏览器环境使用LocalStorage
      else {
        return browserStorage.resetSettings(userId)
      }
    } catch (error) {
      console.error('重置设置失败:', error)
      throw error
    }
  }
}
